#include <Keypad.h>
#include <SoftwareSerial.h>   //加载软串口库
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "OLED.h"
#include "Keypad.h"
#include "SoftwareSerial.h"
#include "STATE.h"
/*
接线方式：
OLED:SCL->A5 SDA->A4
按键矩阵:分为行线和列线、行线插{12, 11, 10, 9, 8}、列线插{7, 6, 5}
SIM800C：TXD->3 RXD->4
*/

void setup(){
  Serial.begin(9600);
  DebugSerial.begin(9600); // 定义软串口的波特率
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  
  display.clearDisplay();//清屏 
  display.display();

  
  DebugSerial.write("AT+CSQ\n");
  DebugSerial.write("AT+CLIP=1\n");// 开来电显示
  DebugSerial.write("AT+CREG?\n");

  CURR= MENU_MODE;
  show_menu();

}
void loop(){
  // DebugSerial.write("AT+CSQ\n");// 开接通显示
  char key = keypad.getKey();// Read the key
  if (key){// Print if key pressed
    if(key!=14 && CURR==MENU_MODE){// 不是黄键，切换到输入模式
      CURR= show_input();
      switch(CURR){
        case CALLING_MODE:{
          show_calling(order);
        }              
        default:
          show_menu();        
      }
    }// 按任意键切换到输入模式
    if(CURR==DIALING_MODE){
      if(key==14||key==15){
        lock=true;
        DebugSerial.write("ATH\n");
        lock=false;
        CURR= MENU_MODE;
        show_menu();
      }
      else if(key==13){
        lock=true;
        DebugSerial.write("ATA\n");
        lock=false;
        CURR= TALKING_MODE;
      }
    }
    // else if(((CURR== CALLING_MODE)||(CURR==DIALING_MODE))&&(key==14||key==15)){
        
    //     lock=true;
    //     DebugSerial.write("ATH\n");
    //     delay(100);
    //     DebugSerial.write("ATH\n");
    //     lock=false;
    //     CURR= MENU_MODE;
    // }
  }
  char temp;
  while(DebugSerial.available()){//持续监听软串口 
    if(!lock){//非写状态
      temp= DebugSerial.read(); 
    }
    Serial.print(temp);   
    if(temp== ':'){//注意这里是单引号！！换成双引号会出错
      CURR= DIALING_MODE;
      show_dialing();
    }
  }
  
}
